﻿using System;
using System.Web.Mvc;

namespace LAPI.Web.Controllers.Reservas
{
    /// <summary>
    /// Controlador para /Permisos/
    /// </summary>
    public class PermisosController : BaseController
    {

        #region /Permisos/GestionUsuarioAdministrador
        /// <summary>
        /// GET: /Permisos/GestionUsuarioAdministrador
        /// </summary>       
        /// <returns>View GestionUsuarioAdministrador.cshtml</returns>
        [HttpGet]
        public ActionResult GestionUsuarioAdministrador()
        {
            ActionResult resultado = comprobarErrorPermisoAdminSistema();
            if (resultado == null)
            {
                LAPI.Business.Gestores.GestorUsuarios gestor = new Business.Gestores.GestorUsuarios();

                LAPI.Business.DatosSesion datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];

                return View(gestor.ObtenerPorPermiso(datosSesion: datosSesion, permisos: Business.Permisos.ADMINISTRADOR_LAPI));
            }

            return resultado;
        }
        #endregion

        #region /Permisos/GestionUsuarioAdministradorCentroDeportivo
        /// <summary>
        /// GET: /Permisos/GestionUsuarioAdministradorCentroDeportivo
        /// </summary>       
        /// <param name="id">Identificador único del centro deportivo</param>
        /// <returns>View GestionUsuarioAdministradorCentroDeportivo.cshtml</returns>
        [HttpGet]
        public ActionResult GestionUsuarioAdministradorCentroDeportivo(Int32 id)
        {
            ActionResult resultado = comprobarErrorPermisoAdminSistema();
            if (resultado == null)
            {
                LAPI.Business.Gestores.GestorUsuarios gestor = new Business.Gestores.GestorUsuarios();

                LAPI.Business.DatosSesion datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];

                ViewData["idCentro"] = id;
                return View(gestor.ObtenerPorCentroDeportivoAdministrado(IdCentroDeportivoAdministrado: id));
            }

            return resultado;
        }
        #endregion

        #region /Permisos/NuevoAdministrador
        /// <summary>
        /// GET: /Permisos/NuevoAdministrador
        /// </summary>       
        /// <returns>View NuevoAdministrador.cshtml</returns>
        [HttpGet]
        public ActionResult NuevoAdministrador()
        {
            ActionResult resultado = comprobarErrorPermisoAdminSistema();
            if (resultado == null)
            {
                LAPI.Business.Gestores.GestorUsuarios gestor = new Business.Gestores.GestorUsuarios();

                LAPI.Business.DatosSesion datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];

                return View(gestor.ObtenerPorPermiso(datosSesion: datosSesion, permisos: Business.Permisos.USUARIO));
            }

            return resultado;
        }
        #endregion

        #region /Permisos/NuevoAdministradorCentroDeportivo
        /// <summary>
        /// GET: /Permisos/NuevoAdministradorCentroDeportivo
        /// </summary>       
        /// <param name="id">Identificador único del centro deportivo</param>
        /// <returns>View NuevoAdministradorCentroDeportivo.cshtml</returns>
        [HttpGet]
        public ActionResult NuevoAdministradorCentroDeportivo(Int32 id)
        {
            ActionResult resultado = comprobarErrorPermisoAdminSistema();
            if (resultado == null)
            {
                LAPI.Business.Gestores.GestorUsuarios gestor = new Business.Gestores.GestorUsuarios();

                LAPI.Business.DatosSesion datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];
                ViewData["idCentro"] = id;
                return View(gestor.ObtenerPorPermiso(datosSesion: datosSesion, permisos: Business.Permisos.USUARIO));
            }

            return resultado;
        }
        #endregion

        #region /Permisos/ActivarAdministrador y /Permisos/DesactivarAdministrador
        /// <summary>
        /// GET: /Permisos/ActivarAdministrador
        /// </summary>       
        /// <param name="id">Identificador único del usuario</param>
        /// <returns>String con el resultado JSON</returns>
        [HttpGet]
        public String ActivarAdministrador(Int32 id)
        {
            LAPI.Business.Acciones.ResultadoAccion resultado = null;

            //0. Comprobamos que haya sesión
            resultado = comprobarPermisoAdminSistema();
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            //1. Activamos permiso
            LAPI.Business.Acciones.AccEstadoPermisoAdministrador activar = new LAPI.Business.Acciones.AccEstadoPermisoAdministrador();
            LAPI.Data.Model.Usuario model = new LAPI.Data.Model.Usuario();
            model.IdPermisos = 3;
            model.IdUsuario = id;
            resultado = activar.ActivarPermisoAdministrador(datosUsuario: model);
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            return resultado.ResultadoToJson();
        }

        /// <summary>
        /// GET: /Permisos/DesactivarAdministrador
        /// </summary>       
        /// <param name="id">Identificador único del usuario</param>
        /// <returns>String con el resultado JSON</returns>
        [HttpGet]
        public String DesactivarAdministrador(Int32 id)
        {
            LAPI.Business.Acciones.ResultadoAccion resultado = null;

            //0. Comprobamos que haya sesión
            resultado = comprobarPermisoAdminSistema();
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            //1. Desactivamos permiso
            LAPI.Business.Acciones.AccEstadoPermisoAdministrador desactivar = new LAPI.Business.Acciones.AccEstadoPermisoAdministrador();
            LAPI.Data.Model.Usuario model = new LAPI.Data.Model.Usuario();
            model.IdPermisos = 1;
            model.IdUsuario = id;
            resultado = desactivar.DesactivarPermisoAdministrador(datosUsuario: model);
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            return resultado.ResultadoToJson();
        }
        #endregion

        #region /Permisos/ActivarAdministradorCentroDeportivo y /Permisos/DesactivarAdministradorCentroDeportivo
        /// <summary>
        /// GET: /Permisos/ActivarAdministradorCentroDeportivo
        /// </summary>       
        /// <param name="id">Identificador único del usuario</param>
        /// <param name="idCentroDeportivo">Identificador único del centro deportivo</param>
        /// <returns>String con el resultado JSON</returns>
        [HttpGet]
        public String ActivarAdministradorCentroDeportivo(Int32 id, Int32 idCentroDeportivo)
        {
            LAPI.Business.Acciones.ResultadoAccion resultado = null;

            //0. Comprobamos que haya sesión
            resultado = comprobarPermisoAdminSistema();
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            //1. Activamos permiso
            LAPI.Business.Acciones.AccEstadoPermisoAdministradoCentroDeportivo activar = new LAPI.Business.Acciones.AccEstadoPermisoAdministradoCentroDeportivo();
            LAPI.Data.Model.Usuario model = new LAPI.Data.Model.Usuario();
            model.IdPermisos = 2;
            model.IdUsuario = id;
            resultado = activar.ActivarPermisoAdministradorCentroDeportivo(datosUsuario: model, idCentroDeportivo: idCentroDeportivo);
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            return resultado.ResultadoToJson();
        }

        /// <summary>
        /// GET: /Permisos/DesactivarAdministradorCentroDeportivo
        /// </summary>       
        /// <param name="id">Identificador único del usuario</param>
        /// <returns>String con el resultado JSON</returns>
        [HttpGet]
        public String DesactivarAdministradorCentroDeportivo(Int32 id)
        {
            LAPI.Business.Acciones.ResultadoAccion resultado = null;

            //0. Comprobamos que haya sesión
            resultado = comprobarPermisoAdminSistema();
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            //1. Desactivamos permiso
            LAPI.Business.Acciones.AccEstadoPermisoAdministradoCentroDeportivo desactivar = new LAPI.Business.Acciones.AccEstadoPermisoAdministradoCentroDeportivo();
            LAPI.Data.Model.Usuario model = new LAPI.Data.Model.Usuario();
            model.IdPermisos = 1;
            model.IdUsuario = id;
            resultado = desactivar.DesactivarPermisoAdministradorCentroDeportivo(datosUsuario: model);
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            return resultado.ResultadoToJson();
        }
        #endregion

        #region Filtros Búsqueda

        /// <summary>
        /// POST: /Permisos/BuscarAdministrador
        /// </summary>
        /// <param name="idusuarioFilter">Filtro por identificador</param>
        /// <param name="nombreFilter">Filtro por nombre/apellido/apellido2</param>
        /// <param name="dniFilter">Filtro por dni</param>
        /// <param name="emailFilter">Filtro por email</param>
        /// <returns>_ListadoUsuarioAdministrador.cshtml</returns>
        [HttpPost]
        public ActionResult BuscarAdministrador(String idusuarioFilter, String nombreFilter, String dniFilter, String emailFilter)
        {

            ActionResult resultado = comprobarErrorPermisoAdminSistema();
            if (resultado == null)
            {
                LAPI.Business.Gestores.GestorUsuarios gestor = new Business.Gestores.GestorUsuarios();

                //Creamos el filtro con los parametros posibles
                System.Collections.Hashtable filtro = new System.Collections.Hashtable();
                if (!String.IsNullOrEmpty(idusuarioFilter))
                    filtro.Add("idusuario", idusuarioFilter);
                if (!String.IsNullOrEmpty(nombreFilter))
                    filtro.Add("nombre", nombreFilter);
                if (!String.IsNullOrEmpty(dniFilter))
                    filtro.Add("dni", dniFilter);
                if (!String.IsNullOrEmpty(emailFilter))
                    filtro.Add("email", emailFilter);

                LAPI.Business.DatosSesion datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];

                return PartialView("_ListadoUsuarioAdministrador", gestor.ObtenerBusqueda(filtroBusqueda: filtro, datosSesion: datosSesion, permiso: Business.Permisos.ADMINISTRADOR_LAPI));
            }

            return resultado;
        }

        /// <summary>
        /// POST: /Permisos/BuscarAdministradorCentroDeportivo
        /// </summary>
        /// <param name="idusuarioFilter">Filtro por identificador</param>
        /// <param name="nombreFilter">Filtro por nombre/apellido/apellido2</param>
        /// <param name="dniFilter">Filtro por dni</param>
        /// <param name="emailFilter">Filtro por email</param>
        /// <param name="idCentro">Identificador único del centro deportivo</param>
        /// <returns>_ListadoUsuarioAdministradorCentroDeportivo.cshtml</returns>
        [HttpPost]
        public ActionResult BuscarAdministradorCentroDeportivo(String idusuarioFilter, String nombreFilter, String dniFilter, String emailFilter, Int32 idCentro)
        {

            ActionResult resultado = comprobarErrorPermisoAdminSistema();
            if (resultado == null)
            {
                LAPI.Business.Gestores.GestorUsuarios gestor = new Business.Gestores.GestorUsuarios();

                //Creamos el filtro con los parametros posibles
                System.Collections.Hashtable filtro = new System.Collections.Hashtable();
                if (!String.IsNullOrEmpty(idusuarioFilter))
                    filtro.Add("idusuario", idusuarioFilter);
                if (!String.IsNullOrEmpty(nombreFilter))
                    filtro.Add("nombre", nombreFilter);
                if (!String.IsNullOrEmpty(dniFilter))
                    filtro.Add("dni", dniFilter);
                if (!String.IsNullOrEmpty(emailFilter))
                    filtro.Add("email", emailFilter);

                LAPI.Business.DatosSesion datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];

                return PartialView("_ListadoUsuarioAdministradorCentroDeportivo", gestor.ObtenerBusqueda(filtroBusqueda: filtro, idCentroDeportivo: idCentro));
            }

            return resultado;
        }

        /// <summary>
        /// POST: /Permisos/BuscarCandidatosAdministrador
        /// </summary>
        /// <param name="idusuarioFilter">Filtro por identificador</param>
        /// <param name="nombreFilter">Filtro por nombre/apellido/apellido2</param>
        /// <param name="dniFilter">Filtro por dni</param>
        /// <param name="emailFilter">Filtro por email</param>
        /// <returns>_ListadoCandidatosAdministrador.cshtml</returns>
        [HttpPost]
        public ActionResult BuscarCandidatosAdministrador(String idusuarioFilter, String nombreFilter, String dniFilter, String emailFilter)
        {

            ActionResult resultado = comprobarErrorPermisoAdminSistema();
            if (resultado == null)
            {
                LAPI.Business.Gestores.GestorUsuarios gestor = new Business.Gestores.GestorUsuarios();

                //Creamos el filtro con los parametros posibles
                System.Collections.Hashtable filtro = new System.Collections.Hashtable();
                if (!String.IsNullOrEmpty(idusuarioFilter))
                    filtro.Add("idusuario", idusuarioFilter);
                if (!String.IsNullOrEmpty(nombreFilter))
                    filtro.Add("nombre", nombreFilter);
                if (!String.IsNullOrEmpty(dniFilter))
                    filtro.Add("dni", dniFilter);
                if (!String.IsNullOrEmpty(emailFilter))
                    filtro.Add("email", emailFilter);

                LAPI.Business.DatosSesion datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];

                return PartialView("_ListadoCandidatosAdministrador", gestor.ObtenerBusqueda(filtroBusqueda: filtro, datosSesion: datosSesion, permiso: Business.Permisos.USUARIO));
            }

            return resultado;
        }

        /// <summary>
        /// POST: /Permisos/BuscarCandidatosAdministradorCentroDeportivo
        /// </summary>
        /// <param name="idusuarioFilter">Filtro por identificador</param>
        /// <param name="nombreFilter">Filtro por nombre/apellido/apellido2</param>
        /// <param name="dniFilter">Filtro por dni</param>
        /// <param name="emailFilter">Filtro por email</param>
        /// <returns>_ListadoCandidatosAdministradorCentroDeportivo.cshtml</returns>
        [HttpPost]
        public ActionResult BuscarCandidatosAdministradorCentroDeportivo(String idusuarioFilter, String nombreFilter, String dniFilter, String emailFilter)
        {

            ActionResult resultado = comprobarErrorPermisoAdminSistema();
            if (resultado == null)
            {
                LAPI.Business.Gestores.GestorUsuarios gestor = new Business.Gestores.GestorUsuarios();

                //Creamos el filtro con los parametros posibles
                System.Collections.Hashtable filtro = new System.Collections.Hashtable();
                if (!String.IsNullOrEmpty(idusuarioFilter))
                    filtro.Add("idusuario", idusuarioFilter);
                if (!String.IsNullOrEmpty(nombreFilter))
                    filtro.Add("nombre", nombreFilter);
                if (!String.IsNullOrEmpty(dniFilter))
                    filtro.Add("dni", dniFilter);
                if (!String.IsNullOrEmpty(emailFilter))
                    filtro.Add("email", emailFilter);

                LAPI.Business.DatosSesion datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];

                return PartialView("_ListadoCandidatosAdministradorCentroDeportivo", gestor.ObtenerBusqueda(filtroBusqueda: filtro, datosSesion: datosSesion, permiso: Business.Permisos.USUARIO));
            }

            return resultado;
        }
        #endregion
      
    }
}
